المشرف المتميز لشهر يونيو 2004

العضو المميز لشهر يونيو 2004

HGB

سابق

سابق

راكان الحنيطي

     


صفحات: (5) « الاول ... 3 4 [5]  ( اذهب إلى أول مشاركة غير مقروءة ) Reply to this topicStart new topicStart Poll

> كل ما تود معرفته عن ال SQL SERVER, سلسلة دروس
joe911
Quote Post


عضو مميز
****

مجموعة اعضاء
مشاركات : 758
رقم العضو 24,631
انضم في : 16-April 04



أعتقد انى فهمت وجهة نظرك يا أخى و لكن أرجو الانتظار بعض الوقت حتى نرى ما ستسفر عنه الأمور,

كما ترى لا يوجد مشرفين لهذا المنتدى و يبدو أن الأخ محمد بدوى مشغول هذه الأيام,فلا تتضايق و اعطهم فرصة
PMEmail Poster
Top
طارق إبراهيم
Quote Post


عضو شرف
*****

مجموعة أعضاء الشرف
مشاركات : 1,022
رقم العضو 5,617
انضم في : 7-November 02



اخى العزيز خالد مهما حاولنا فالاعضاء يقومون بحفظ الدروس فقط و يقولون ربما احتجناها وقتا ما
الشعور النبيل الذى اظهرته بطرح هذه الدروس فكره جيده و استمرارك فيها بالرغم من اى شئ نصيحتى إليك إن اردت ان تعتبر بها قم بحفظ هذه الدروس منسقه فى ملفات pdf ليسهل علينا وضعها بعد ذلك فى منتدى المقالات والدروس الجارى إنشائه وبعد ان تنتهى من جزء معين قم بعمل اختبار للاعضاء


--------------------
كلما زادت معرفتي، ازدادت قناعتي بأن ما أجهله أكثر مما أعرفه
QUOTE

فأغلب من يسئل في المنتديات العربية يريد السمكة جاهزة ولايريد أن يتعلم كيف يصطادها

PMEmail PosterUsers Website
Top
goldnoil
Quote Post


مشرف منتدى مبرمجي Microsoft SQL Server
Group Icon

مجموعة المشرفين
مشاركات : 362
رقم العضو 13,643
انضم في : 9-May 03



لغة الاستفسارات SQL (3)

المقدمة:

تعلمنا في الدرس السابق استخدام الاستعلام في التطبيق و هذه أهم نقطة في لغة الاستعلام، والآن سنتعلم تطبيق متقدم في لغة الاستعلام و هو الاستعلام من أكثر من جدول ، عندما نقول الاستعلام من أكثر من جدول نقصد مثلا أن يطلب منا الاستعلام عن الأشخاص الذين يعملون ضمن قسم المحاسبة ، الشرط هنا هو العمل في قسم المحاسبة لكن الشرط غير موجود في الجدول ؟ إذا كيف سنقوم بالاستعلام ؟ سنقوم بالاستعلام عن الشرط من جدول آخر ثم نرجع النتيجة و يستعلم في الاستعلام الأساسي عليها و بذلك يكون لدينا استعلامين ،و لكن يجب أن يكون هناك حقل مشترك بين الجدولين ، سيتضح كل ذلك في السطور التالية :

الدرس
11
قبل أن نبدأ افرض أن لدينا الجدولين التاليين :

tb1

deptno jop sal name
جميل 6000 محاسب 3
سامي 12000 مدير 1
بدر 5500 مبرمج 2
مهند 8500 مهندس 1
صالح 5000 سكرتير 3



tb2
deptname deptn
1 الهندسة
2 الكمبيوتر
3 المحاسبة

نريد الاستعلام عن أسماء الموظفين الذين ينتمون لقسم ما و لنفرض أننا نريد من ينتمي لقسم الهندسة، ستكون صيغة الاستعلام على الشكل التالي " حدد حقل الاسم من الجدول tb1 عندما يكون اسم القسم الهندسة " ، لكن هناك مشكلة حيث لا يوجد حقل باسم القسم في نفس الجدول لكن يوجد اسم القسم في جدول آخر، ويوجد في الجدول الذي لدينا رقم القسم لكننا نريد البحث على أساس اسم القسم و ليس رقمه ، إذا يجب أن نحصل على اسم القسم من الجدول الآخر ، وللحصول على معلومات من جدول آخر يجب تحقق شرط مهم و هو وجود حقل مشترك بين الجدولين و هذا ينطبق في حالتنا ، إذا ستكون صيغة الاستعلام على الشكل التالي : " حدد حقل الاسم من الجدول tb1 عندما يكون اسم القسم يساوي (حدد اسم القسم من الجدول tb2 عندما يكون رقم القسم1( "

هكذا وضعنا الاستعلام بالصورة المطلوبة حيث كنا نفتقد للشرط في الاستعلام الأول لعدم وجوده في نفس الجدول لذا قمنا بعمل استعلام آخر فرعي لكي نحصل منه على الشرط ، الآن دعونا نتعلم كيف نكتب ما قلناه منذ قليل بلغة الاستعلام :


CODE
SQL = "select name from Tb1 where deptname = (select deptname form tb2 where deptno = 1) "


قد تتساءل لماذا نقوم بهذه العملية الطويلة مع أنه بإمكاننا أن نشترط شرط على أساس رقم القسم الذي يتوفر لدينا حيث نعرف أن قسم الهندسة يحمل الرقم 1 ؟ الجواب و بكل بساطة أنه ليس في كل مرة ستعرف ذلك حيث يوجد استعلامات معقدة لا يمكنك بأن تقوم بحساب الشرط بنفسك لكي تضع استعلام واحد ، حيث أن بعض التطبيقات يجب عليك فيها استخدام الاستعلام المركب و قد يصل لأكثر من استعلام لحل و إيجاد قيمة استعلام واحد
في الاستعلام المتفرع من استعلام لا نضع علامتي تنصيص مزدوجة على الشرط النصي بل نضع علامة تنصيص مفردة مثل هذه '
لم أجعل هذا الدرس طويل ولم أضف إليه نقاط أخرى لاعتقادي بأنه من أهم الدروس في لغة الاستعلام و يستحق أن يفرد له درس خاص ،




--------------------
إذا لم تزد شيئا على الحياة كنت أنت زائدا على الحياة..

- الرجل الذي صعد الهملايا قال لم أنتصر على جبل.. انتصرت على نفسي!

- لن تكون فاشلا إلا إذا توقفت عن المحاولة


براءة اختراع بالمجان

كل ماتود معرفته عن مسجل النظام

SQL SERVER سلسلة دروس من الصفر حتى الاحتراف
PMEmail Poster
Top
goldnoil
Quote Post


مشرف منتدى مبرمجي Microsoft SQL Server
Group Icon

مجموعة المشرفين
مشاركات : 362
رقم العضو 13,643
انضم في : 9-May 03



لغة الاستفسارات SQL (4)

المقدمة:

في هذا الدرس سوف نتعلم بعض التطبيقات على الاستعلام

الدرس12

أحيانا نحتاج الحروف الأولى من حقل ما ، فمثلا في الجامعات يكتبون الحروف الثلاثة الأولى من اسم المقرر، و غيرهم أيضا يحتاج لمثل هذه الخاصية ، وسوف نتعلم كيف نقوم باستخراج الأحرف الثلاثة الأولى من اليسار لجميع القيم في حقل معين، الكود السحري الذي سيقوم بهذه العملية هو التالي :

CODE
SQL = "select left$(name,3) as k from tb1"


استخدمنا الدالة left المعروفة لتحديد الحروف من حقل معين و الذي اسمه في المثال السابق name و قد قمنا بتخزين القيم في المتغير k و يمكنك تخزينها في أي متغير تريد ، طبعا الجدول في حالتنا اسمه tb1 ، هذا كل شيء ، طبعا نقوم بعد ذلك بإظهار النتائج كما تعلمنا في الدروس السابقة

سنأخذ الآن طريقة تحديد القيم التي تحتوي على حرف معين سواء في منتصف الكلمة أو في أولها أو أخرها ، هذا التطبيق مهم و له استخدامات عديدة في البحث خصوصا فمثلا تكون تعرف أن اسم الطالب يحتوي على حرف معين لكن لا تعرف اسم الطالب و أين موقع الحرف في اسمه ، طريقة الاستعلام التالية سوف تبين لنا كيفية استخدام هذه الطريقة ، الكود هو :

CODE
SQL = "select name from Tb1 where name like '*" & text1.text & "*'"


لا حظ أننا قمنا باستخدام الجملة Like و هي بمعنى التشابه وليس شرطا التساوي بعد ذلك وضعنا الشرط و هو ما يدخله المستخدم في مربع النص و انظر أننا وضعنا علامتين نجميتين في الشرط وهي تستخدم في إعلام البرنامج بأنه سيحدد أي قيمة تشبه القيمة المدخلة في أي موقع منها

إن الاستعلام يعيد القيم مرتبة على أساس ترتيب إدخالها ، لكن أحيانا تحتاج بأن تقوم بترتيب النتائج ترتيبا تصاعديا أو تنازليا ولفعل ذلك نستخدم الأمر Order By و يكون شكل الاستعلام على الطريقة التالية :

CODE
SQL = "select name from Tb1 where name like '*" & text1.text & "*' order By name Asc"


بعد كتابة الأمر Order by اكتب اسم الحقل الذي تريد أن يكون الفرز و الترتيب عليه وهو في حالتنا name بعد ذلك اكتب طريقة الفرز التي تريدها تصاعدي أي من الألف للياء ونستخدم لذلك أمر Asc ، مع العلم أن عند عدم وضع Asc فإن البرنامج يقوم تلقائيا بفرزه تصاعديا
أما الفرز التنازلي من الياء إلى الألف فنستخدم الأمر Desc بدلا من Asc




--------------------
إذا لم تزد شيئا على الحياة كنت أنت زائدا على الحياة..

- الرجل الذي صعد الهملايا قال لم أنتصر على جبل.. انتصرت على نفسي!

- لن تكون فاشلا إلا إذا توقفت عن المحاولة


براءة اختراع بالمجان

كل ماتود معرفته عن مسجل النظام

SQL SERVER سلسلة دروس من الصفر حتى الاحتراف
PMEmail Poster
Top
goldnoil
Quote Post


مشرف منتدى مبرمجي Microsoft SQL Server
Group Icon

مجموعة المشرفين
مشاركات : 362
رقم العضو 13,643
انضم في : 9-May 03



التعامل مع Flex Grid

المقدمة:
إن أداة FlexGrid إحدى أدوات إظهار البيانات في شكل شبكي أو جدولي إن صح التعبير سنتطرق في هذا الدرس إلى كيفية وضع نتائج استفسار فيها و إظهاره للمستخدم و كذلك بعض الأفكار في التعامل مع هذه الأداة

الدرس13

قبل كل شيء دعنا نقوم بإعطائك الصورة التي نريد أن نصل إليها في النهاية لكي تكون على علم بما سنعمل عليه انظر الصورة التالية :

user posted image


لكي نبدأ بالدرس أضف مشروع جديد و انشأ أو استخدم أي قاعدة بيانات و اربطها في البرنامج كما تعلمنا سابقا ، وسنفترض أن قاعدة البيانات التي سنتعامل معها اسمها db وفيها جدول باسم tbويحتوي على الحقول التالية namd و job و age سنكتفي بثلاثة حقول ، بعد ذلك يجب أن تضيف أداة هذه الشبكة ولفعل ذلك ، اذهب إلى قائمة project >> combonent أو اضغط على ctrl+T ستفتح لك قائمة المكونات اختر منها المكون التالي و ضع بجانبه علامة صح Microsoft FlexGrid Control 6.0 كما هو موضح في الصورة


user posted image


بعد أن تحدد المكون الذي في الصورة السابقة اضغط Ok لتضيف المكون للمشروع وتعود للمشروع
بعد ذلك اختر الأداة الخاصة برسم FliexGrid كما هو مبين في الصورة التالية و ارسم على الفورم مساحة معقولة تأخذ تقريبا ثلث الفورم


user posted image



اضغط بالزر الأيمن على الشبكة التي قمت برسمها و اختر Properties ستفتح لك نافذة الخصائص وفي علامة التبويب General يمكنكم اختيار عدد الصفوف من الخاصية Rows و عدد الأعمدة من الخاصية Cols ، كما يمكنك تحديد عدد الأعمدة التي تكون بلون داكن كمفتاح للشبكة من الخاصيةFixed Cols أو الصفوف التي بلون داكن من الخاصية Fixed Rows
الآن سنتعلم التحكم بخصائص FlexGrid بواسطة الكود ، يجب أن تعلم أن جميع الأوامر التي تكتب لهذه الأداة غالبا ما تكتب في حدث التحميل للفورم Load ، و من الخصائص التي يجب أن تتعلمها هي التحكم في عرض الصفوف مع العلم بأن الصفوف مرقمة من اليسار إلى اليمين ابتداء من الصفر و إذا أردنا مثلا أن نغير عرض العمودين رقم 0 و 3 مثلا و نريد أن يكون عرضهما 2000 و 1000 على التوالي فإننا سنحتاج إلى كتابة الكود التالي :


CODE
MSFlexGrid1.Colwidth(0) = 2000
MSFlexGrid1.Colwidth(3) = 1000



مع العلم بأن اسم الأداة في الكود السابق هو MSFlexGrid1، لاحظ أننا نقوم بحصر رقم الصف بين قوسين
و الآن كيف سنقوم بوضع عناوين الحقول على الأعمدة في هذه الشبكة لكي نفرق بين الحقول ، الفكرة بأن تقوم بتحديد الخلية بالصف والعمود بعد ذلك تكتب النص المراد ، مثلا نريد أن نكتب عنوان الحقل الأول و هو "الاسم " في العمود الأول و عنوان الحقل الثاني و هو " العمل " في العمود الثاني فماذا سنعمل انظر للكود التالي و ستعرف

CODE
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "الاسم "
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "العمل"


لاحظ أننا في أول سطرين من الكود السابق قد قمنا بتحديد أول خلية على اليسار في الزاوية العليا و ذلك بتحديد إحداثياتها وهي الصف الأول و العمود الأول ، ثم قمنا بكتابة العنوان بالخاصية Text ، مع العلم بأن البرنامج يقوم بتخزين إحداثيات آخر خلية تقوم بكتابتها ، لذلك و عندما نكتب إحداثيات النقطة الثانية ستستفيد من هذه الميزة فسنكتب إحداثي العمود و هو 1 لأن الاحداثي السابق للصف هو 0 و هو مخزن فلماذا نكتبه مرة أخرى مادمنا لا نحتاج لتغييره ، بعد ذلك نكتب العنوان باستخدام الخاصية Text كما فعلنا مع الأولى و نستمر بهذه العملية إذا احتجنا إلى عناوين أخرى ، وستظهر العناوين التي عملناها بالكود السابق كما الشكل التالي :


user posted image


و الآن كيف نقوم بتعبئة البيانات من جدول أو استعلام ؟
كما تعلمنا في الدروس السابقة فإننا نقوم بإنشاء جدول وهمي لكي نخزن فيه البيانات مؤقتا كما هو حال الرام RAM في الجهاز لتخزين البيانات لنتعامل معها و بعد إغلاق الجهاز تذهب المعلومات ، إن ديناميكية تعبئة البيانات بسيطة و سلسة ونحتاج أولا وضع عناوين الأعمدة كما تعلمنا في الفقرة السابقة ويكتب ذلك غالبا في حدث التحميل Load بعد ذلك يأتي دور تعبئة السجلات ، وقبل كل شيء أضف سطر يتأكد من وجود بيانات في الجدول لكي لأتواجه مشاكل ، بعد ذلك احسب عدد السجلات في الجدول و لفعل ذلك كما تعلمنا سابقا يجب أولا أن نمر على الجدول إلى النهاية ثم نعود إلى البداية لكي نستطيع إيجاد عدد السجلات بواسطة الخاصية Count نقوم بعد ذلك بعمل تكرار على عدد السجلات و نضع داخله كود يقوم بتعبئة البيانات بنفس الطريقة التي قمنا فيها بوضع عناوين الأعمدة ولكن يكون المصدر هو الجدول ،لن تفهم ما ذكرته إلا عندما تشاهد الكود المطلوب و الذي سأورده الآن مع ملاحظة أن اسم الجدول الوهمي TB و يوجد به الحقول Name و Job ، مع ملاحظة أن اسم FlexGrid في الكود التالي هو flx1

CODE
If tb.RecordCount < 1 Then Exit Sub  ' لكي نتأكد من وجود سجلات في الجدول أو نخرج في حال عدمها
   tb.MoveLast  ' نتحرك إلى الحقل الأخير
   tb.MoveFirst  ' نتحرك إلى الحقل الأول
   n = tb.RecordCount  ' نخزن عدد السجلات في المتغير n
  For i = 1 To n
       flx1.Row = i  ' رقم الصف حسب رقم التكرار
       flx1.Col = 0  ' رقم العمود ثابت لأننا سوف نضع جميع القيم للحقل في عمود واحد
       flx1.Text = tb!Name  ' نضع قيمة الحقل في الخلية المحددة
       flx1.Col = 1
       flx1.Text = tb!job
        tb1.MoveNext  ' نتحرك للسجل التالي
  Next i

End Sub




ربما لا أستطيع الشرح بوضوح بالكتابة لكن أسأل الله أن أكون قد استطعت أن اقطع شوطا كبيرا في الشرح ، على العموم يجب أن تحاول قراءة الكود و تطبيقه و كذلك و هو الأهم فهمه
من المهارات الممتازة أن تعرف كيف تجعل عدد الصفوف يتغير حسب عدد السجلات ولعمل ذلك اجعل خاصية عدد الصفوف تساوي عدد السجلات في الجدول زائدا واحد ، و قمنا بهذه الزيادة لأنها تعبر عن صف عناوين الحقول و ضع هذه الجملة في المكان المناسب بعد حساب عدد الحقول في الجدول و يوضح الكود التالي موقع الجملة من الكود السابق :


CODE
If tb.RecordCount < 1 Then Exit Sub
   tb.MoveLast
  tb.MoveFirst
  n = tb.RecordCount
  flx1.Rows = n + 1
  For i = 1 To n
      flx1.Row = i
      flx1.Col = 0
      flx1.Text = tb!Name
      flx1.Col = 1
      flx1.Text = tb!job
      tb.MoveNext
  Next i

End Sub



--------------------
إذا لم تزد شيئا على الحياة كنت أنت زائدا على الحياة..

- الرجل الذي صعد الهملايا قال لم أنتصر على جبل.. انتصرت على نفسي!

- لن تكون فاشلا إلا إذا توقفت عن المحاولة


براءة اختراع بالمجان

كل ماتود معرفته عن مسجل النظام

SQL SERVER سلسلة دروس من الصفر حتى الاحتراف
PMEmail Poster
Top
joe911
Quote Post


عضو مميز
****

مجموعة اعضاء
مشاركات : 758
رقم العضو 24,631
انضم في : 16-April 04



مجهود أكثر من رائع أخى,

أنا أجلت شرح التقارير الى أن نصل له و يكون الموضوع أكبر مرجع للتعامل مع قواعد البيانات باذن الله
PMEmail Poster
Top
goldnoil
Quote Post


مشرف منتدى مبرمجي Microsoft SQL Server
Group Icon

مجموعة المشرفين
مشاركات : 362
رقم العضو 13,643
انضم في : 9-May 03



نحن بانتظارك اخي وانا تقريبا خلصت الدروس اللي عندي ماعاد في كتير

وبعدها تتابع انت سلسلة اخرى وهكذا....

حتى نصل الى مرجع كامل عن قواعد البيانات باذن الله

ونكون قد سددنا ثغرة موجودة بيننا حول هذا الموضوع



--------------------
إذا لم تزد شيئا على الحياة كنت أنت زائدا على الحياة..

- الرجل الذي صعد الهملايا قال لم أنتصر على جبل.. انتصرت على نفسي!

- لن تكون فاشلا إلا إذا توقفت عن المحاولة


براءة اختراع بالمجان

كل ماتود معرفته عن مسجل النظام

SQL SERVER سلسلة دروس من الصفر حتى الاحتراف
PMEmail Poster
Top
الحسناء
Quote Post


عضو جديد
*

مجموعة اعضاء
مشاركات : 48
رقم العضو 19,060
انضم في : 25-October 03



ممتاز ممتاز ممتاز و الى الامام انا من اشد المتابعين لهذه الدروس وقد حصلت علي نسخة مايكروسوفت اس كيو ال سيرفر 2000 وتم انزالها على الجهاز وانا اسعى لتطبيق كامل المشروع على سيرفر


الى الامام يا اخي goldnoil نفع الله بك ووفقك
PMEmail Poster
Top
الحسناء
  مرجع رابط المشاركة : Aug 1 2004, 03:26 PM
Quote Post


عضو جديد
*

مجموعة اعضاء
مشاركات : 48
رقم العضو 19,060
انضم في : 25-October 03



اخي العزيز

انا من اشد المعجبين بهذه الشروح الجباره وواثقه كل الثقه انني بفضل الله ثم بتعاونكم سوف احقق الاحتراف في هذا التطبيق
والان وبعد الشكر لكم يأتي دور الاسئله التي كنت تتوق اليها

وانا من النوع المزعج كثير الاسئلة : )-

القدر المحتوم........

السئوال هو انني متابع لدروسك واطبقها جميعا الى ان وصلنا لهذا السطر المهم الذي اعتبرته العامود الفقرى لعمليات الاستعلام

CODE
Set t = b.OpenRecordset(SQL, dbOpenDynaset)




عند عملية الاستعلام يعترض البرنامج على هذا الامر حيث ان الامر في البوتن كلك كالتالي


CODE

Private Sub Command9_Click()
SQL = "select name from Tb1 where num = 1 "
Set t = b.OpenRecordset(SQL, dbOpenDynaset)
For i = 1 To n
List1.AddItem TB!Name
tb1.MoveNext
Next i


هل ترمز tb هل ترمز الى الجدول في قاعدة البيانات حيث اننا قمنا بتسميته tb1

ارجو تفصيلها وتوضيحها رجااااء لاهميتها وشكراا جدا

PMEmail Poster
Top
الحسناء
Quote Post


عضو جديد
*

مجموعة اعضاء
مشاركات : 48
رقم العضو 19,060
انضم في : 25-October 03



الى الامام goldnoil
PMEmail Poster
Top
goldnoil
Quote Post


مشرف منتدى مبرمجي Microsoft SQL Server
Group Icon

مجموعة المشرفين
مشاركات : 362
رقم العضو 13,643
انضم في : 9-May 03



شكرا لك اخت حسناء
ساعمل على اجابتك ان شاء الله لكن اعطني القليل من الوقت

غدا امتحان نهائي ادعو لي


--------------------
إذا لم تزد شيئا على الحياة كنت أنت زائدا على الحياة..

- الرجل الذي صعد الهملايا قال لم أنتصر على جبل.. انتصرت على نفسي!

- لن تكون فاشلا إلا إذا توقفت عن المحاولة


براءة اختراع بالمجان

كل ماتود معرفته عن مسجل النظام

SQL SERVER سلسلة دروس من الصفر حتى الاحتراف
PMEmail Poster
Top
3 مستخدم يقرأون هذا الموضوع (3 ضيف0 مستخدم مجهول)
0 أعضاء:

Topic Options صفحات: (5) « الاول ... 3 4 [5]  Reply to this topic Fast ReplyStart new topicStart Poll


 



[ Script Execution time: 0.1347 ]   [ 11 queries used ]   [ ضغط البيانات فعال ]

Google